iT邦幫忙

2024 iThome 鐵人賽

DAY 9
0
AI/ ML & Data

基於人工智慧與深度學習對斑馬魚做行為分析系列 第 9

Day 9Lstm預測兩隻斑馬魚行為分析

  • 分享至 

  • xImage
  •  

今天是第9天我想寫一個關於兩隻斑馬魚的行為分析,以下是程式碼

import numpy as np
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense

# 假設已經有兩隻斑馬魚的行為數據,並且每隻斑馬魚的行為數據是 3 維的 (例如位置 x, y 和速度)
# data_shape = (樣本數, 時間步長, 特徵數)
zebrafish1_data = np.random.rand(1000, 50, 3)  # 1000 個樣本,每個樣本有 50 個時間步長,每個步長有 3 個特徵
zebrafish2_data = np.random.rand(1000, 50, 3)

# 假設標籤是二分類的 (例如 0: 正常, 1: 異常)
labels = np.random.randint(2, size=(1000,))

# 建立 LSTM 模型
model = Sequential()
model.add(LSTM(64, input_shape=(50, 3), return_sequences=True))
model.add(LSTM(64))
model.add(Dense(32, activation='relu'))
model.add(Dense(1, activation='sigmoid'))

# 編譯模型
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

# 合併兩隻斑馬魚的數據
combined_data = np.concatenate([zebrafish1_data, zebrafish2_data], axis=-1)  # 在特徵維度上合併

# 訓練模型
model.fit(combined_data, labels, epochs=20, batch_size=32, validation_split=0.2)

# 預測
predictions = model.predict(combined_data)
print(predictions)

1. 引入必要的模組

import numpy as np
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense
  • numpy: 用於處理數組(矩陣)數據。
  • tensorflowkeras: 用於建立和訓練深度學習模型。Sequential 是一個順序模型,LSTM 是長短期記憶層(適用於時間序列數據),Dense 是全連接層。

2. 準備數據

zebrafish1_data = np.random.rand(1000, 50, 3)
zebrafish2_data = np.random.rand(1000, 50, 3)
labels = np.random.randint(2, size=(1000,))
  • zebrafish1_datazebrafish2_data 是兩隻斑馬魚的行為數據。
    • 這些數據的形狀是 (1000, 50, 3),表示有 1000 個樣本,每個樣本有 50 個時間步長,每個時間步長有 3 個特徵(例如位置 x, y 和速度)。
    • np.random.rand 用於生成 0 到 1 之間的隨機浮點數。
  • labels 是這些樣本對應的標籤,這裡假設標籤是二分類(0 或 1)。
    • np.random.randint(2, size=(1000,)) 生成了 1000 個 0 或 1 的隨機整數標籤。

3. 建立 LSTM 模型

model = Sequential()
model.add(LSTM(64, input_shape=(50, 3), return_sequences=True))
model.add(LSTM(64))
model.add(Dense(32, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
  • Sequential 模型是一種線性堆疊模型,適合從頭到尾執行操作。
  • 第一層 LSTM(64, input_shape=(50, 3), return_sequences=True):
    • 64: 表示該 LSTM 層有 64 個隱藏神經元。
    • input_shape=(50, 3): 輸入數據的形狀為 (50, 3),即每個樣本有 50 個時間步長,每個時間步長有 3 個特徵。
    • return_sequences=True: 表示該層會返回完整的序列,而不是只返回最終的隱藏狀態。
  • 第二層 LSTM(64):
    • 同樣有 64 個隱藏神經元,但這次只返回最後一個隱藏狀態(因為 return_sequences 默認為 False)。
  • Dense(32, activation='relu'):
    • 全連接層,有 32 個神經元,使用 ReLU 作為激活函數。
  • Dense(1, activation='sigmoid'):
    • 最後一個全連接層,有 1 個神經元,使用 sigmoid 作為激活函數,適合二分類問題。

4. 編譯模型

model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
  • optimizer='adam': 使用 Adam 優化器來更新模型的權重,Adam 是一種自適應學習率的優化算法,常用於訓練深度神經網路。
  • loss='binary_crossentropy': 二分類交叉熵損失函數,用於二分類問題的損失計算。
  • metrics=['accuracy']: 在訓練過程中,我們會跟踪模型的準確性(accuracy)作為評估指標。

5. 合併兩隻斑馬魚的數據

combined_data = np.concatenate([zebrafish1_data, zebrafish2_data], axis=-1)
  • np.concatenate: 將兩隻斑馬魚的數據在最後一個維度上進行拼接,即特徵維度。
  • axis=-1: 指定在特徵維度(第三維度)上進行拼接。結果的形狀會是 (1000, 50, 6),其中 6 是兩隻斑馬魚的特徵數目之和。

6. 訓練模型

model.fit(combined_data, labels, epochs=20, batch_size=32, validation_split=0.2)
  • model.fit: 開始訓練模型。
  • epochs=20: 訓練過程將重複 20 次。
  • batch_size=32: 每次梯度更新使用 32 個樣本。
  • validation_split=0.2: 將 20% 的數據用作驗證集,用於在訓練期間評估模型的性能。

7. 預測

predictions = model.predict(combined_data)
print(predictions)
  • model.predict: 使用訓練好的模型對斑馬魚的行為數據進行預測。
  • predictions 是模型對每個樣本的預測結果,這裡的結果會是每個樣本的預測分類(介於 0 到 1 之間的概率值)。

總結

這段程式碼主要用於通過 LSTM 模型來分析兩隻斑馬魚的行為。數據經過 LSTM 層的處理,最終輸出為一個二分類結果,可以用來判斷斑馬魚的行為是否異常。您可以根據需求進一步調整這個模型,例如添加更多的數據特徵、調整 LSTM 層的數量和神經元數量,或是使用不同的損失函數來適應不同的應用場景。


上一篇
day 8 Lstm 預測奧運運動隊伍奪冠率
下一篇
day 10 Lstm model training
系列文
基於人工智慧與深度學習對斑馬魚做行為分析30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言